Methods for encoding digital video for decoding on low performance devices

ABSTRACT

A video encoder encodes the video stream frame by frame. An encoding process generally includes receiving a video frame, subdividing the video frame into uniform pixel blocks, comparing a selected pixel block with the corresponding pixel block in a previous decoded video frame to determine which blocks have changed, copying changed pixel blocks into a contiguous memory block, and adding a preamble block, compressing the blocks. This process may be repeated for each frame using a different size pixel block to determine and select a pixel block size that results in the smallest encoded frame.

BACKGROUND OF THE INVENTION

1. Field of the Invention

This Invention relates generally to video encoding/decoding methods andmore particularly to video encoding/decoding methods for use inconjunction with low bandwidth connections and low performance devices.

2. Description of the Related Art

Video streams are regularly encoded, transmitted over computer networks,and decoded and displayed on desktop computers. Web browsers and theWorld Wide Web have facilitated access to and presentation of videomedia. The recent combination of the palmtop computing device andwireless access to the Internet has provided a basic platform forwireless web browsing. Lower bandwidths and processing performances,however, make conventional encoding and streaming techniquesinapplicable for streaming video to wirelessly connected palmtopdevices.

State of the art video compression standards such as H.261, H.263,MPEG1/2/4 and M-J PEG are based on either Discrete Cosine Transform(DCT) or Wavelet Transformation. Prototype implementations with H.263and a Custom DCT codec have shown that the DCT decoding process is tooslow on current Palm Operating System (“PalmOS”) platforms. The sameholds for the Wavelet transformations. A principal reason for this isthe large number of multiplications required for decoding. Typicalimplementations use the Chen-Wang algorithm (IEEE ASSP-32, pp. 803-816,August 1984). In the worst case, this algorithm requires 176multiplications and 464 adds per 8.times.8 pixel block. A typical PalmOSdevice has a 160.times.160 pixel frame, in which case 70,400multiplications are needed. A 68000 series microprocessor needs roughly80 cycles for a single multiplication. Thus, a microprocessor running at20 MHz takes approximately 0.28 seconds to perform thesemultiplications, leading to a frame rate about 3 frames per second. Thiscalculation, however, assumes the worst case. Higher frame rates may betheoretically achieved by reducing the video frame size, limiting thenumber of colors, and/or reducing the video quality by means of DCTvector quantisation. Shortcuts in the Chen-Wang algorithm can benefitfrom vectors that equal zero. Nevertheless, the given approximation ofthe decoding delay does not include the adds and the additional DCTvectors needed for color videos. Prototype implementations have shownthat the decoding delay for a full screen video frame in photo qualityis at least 1.5 seconds.

In general, a more realistic solution for very low-performance clientdevices is block-based difference encoding, because of its low computingdemands on the decoding client device. However, it is generally acceptedby those skilled in art that the, central challenge in such algorithmsis to select an optimal encoding block size. Quoting from New MediaRepublic's description of interface video encoding (see articlehttp://www.newmediarepublic.com/dvideo/compression/adv07.html, by CollinManning, lecturer In computer science at Cork Institute of Technology,included herein as an exhibit), Clearly the choice of block size must bean informed one so as to achieve the best balance between image qualityand cession.

Please note that block-based motion compensation is an entirelydifferent category of video compression from block-based differenceencoding. Motion compensation has little relevance under low-performancecomputing conditions, because the client-side vector algebra requiredfor computing image region translations based on arbitrary vectors istoo multiplication-intensive for low performance client devices. As aresult, inventions such as Krause (U.S. Pat. No. 5,235,419) cannot beapplied under these conditions, nor can they be modified to resembleblock-based difference encoding methods.

For a succinct description of the differences between block-baseddifference coding and block-based motion compensation, refer to theaforementioned Manning article.

The embodiments of the invention seek to provide video encodingtechniques and formats that are well-suited to decoding bylow-performance devices, such as a PalmOS device, and that iswell-suited to transmission over low-bandwidth links, such as wirelessnetworks.

SUMMARY OF THE INVENTION

Generally, the invention provides a method and a system to encode avideo stream comprising a series of frames. The video stream is encodedby a video encoder that runs on a server. The encoded video is thentransmitted over a communication link to a client device whereupon adecoder decodes and displays the video stream.

The video encoder encodes the video stream frame by frame. Encodingprocess generally includes receiving a video frame, subdividing thevideo frame into uniform pixel blocks, comparing a selected pixel blockwith the corresponding pixel block in a previous decoded video frame todetermine which blocks have changed, copying changed pixel blocks Into acontiguous memory block, adding a preamble block, compressing theblocks, and repeating this process to determine and select a pixel blocksize that results in the smallest encoded frame.

First, the video encoder logically divides each video frame into uniformblock sizes. Each of these uniform pixel blocks is compared with thecorresponding pixel block from the previous decoded video frame todetermine if there are any significant differences. If so, the encoderdeletes the block out of the encoded video frame.

After completing the block by block comparison, the pixel blocks thathave not been deleted are copied into a continuous memory block. Apreamble block indicating the layout of the memory block is then added.The resulting packet comprising the preamble block and the memory blockis thereafter compressed. In an embodiment, a video frame is encodedusing different block sizes to choose the block size that results insmallest encoded frame.

Encoded video frame is thereafter sent over a network via acommunication link to a client device. A decoder in the client devicedecodes and displays the decoded video frame using a correspondingdecoding method.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates a video encoding system at a general level.

FIG. 2 illustrates a set of components for implementing the videoencoding process.

FIG. 3 illustrates a method performed by the video encoder.

FIG. 4 Illustrates a method of determining what block size to use.

FIG. 5 illustrates a method performed by the decoder.

DETAILED DESCRIPTION OF THE EMBODIMENTS

In the following description, reference is made to the accompanyingdrawings, which form a part hereof, and which show, by way ofillustration, specific embodiments or processes in which the inventionmay be practiced. Where possible, the same reference numbers are usedthroughout the drawings to refer to the same or like components. In someinstances, numerous specific details are set forth in order to provide athorough understanding of the various embodiments. The presentinvention, however, may be practiced without the specific details orwith certain alternative equivalent devices and methods to thosedescribed herein. In other instances, well-known methods and deviceshave not been described in detail so as not to unnecessarily obscureaspects of the present invention.

I. System Overview

FIG. 1 illustrates a system 100 in accordance with which an input videostream 110 can be encoded and streamed to a client device 140. A proxyserver 114 receives the input video stream 110 from a source (anotherserver, for example) on the Internet or any other source from which avideo input stream can be obtained. The proxy server 114 can include orexecute in conjunction with a video encoder 120, which encodes the inputvideo signal into an encoded stream 130 for transmission to the clientdevice 140. The communication link 134 between the proxy server 114 andthe client device can be a wireless Internet connection via a wirelessmodem. Wireless modems that communicate through cellular telephonetechnology are presently available for many palmtop devices. The proxyserver-client device communication link 134 may alternatively be aland-line modem connection or another type of connection.

The client device 140 can be a palmtop device, such as a Palm Pilot or aHandspring Visor running the PalmOS operating system. PalmOS devicesgenerally provide a 160.times.160 pixel grayscale or color screen uponwhich video can be displayed. The client device 140 may, however, be anyother device that can be configured to decode and display video, such asa desktop computer. The client device 140 includes a decoder 150, whichdecodes the encoded stream 130 for display on a display screen of theclient device. The decoder 150 is can be a software module that executeson the client device 140, but the decoder 150 may be embodied as ahardware module that is integrated into the client device 140.

In one example configuration, video is decoded and displayed by theclient device 140 as it is received. In an alternative configuration,encoded video is downloaded to a client device and stored for subsequentdisplay.

The input stream 110 may be in any form and can be converted by theencoder 120 using conventional techniques into a format suitable forencoding in accordance with one embodiment. The input video stream 110may, for example, be any type of previously compressed or uncompressedvideo stream or feed, such as, for example RGB16, RGB24. The videostream 110 can be obtained, for example, from AVI files, from variousvideo transmitter applications, or from frame grabber softwareinterfaces. The video encoder 120 can be configured to process all ofthese types of video streams as well as a variety of other video streamformats.

II. Encoding Method

FIG. 2 is a high level depiction of an encoding method 200 in accordancewith one embodiment of the invention. At a first step 210, a videosource frame 212 is broken into a set of blocks 214. At a blockidentification step 220, each block 214 is compared with thecorresponding block in the previous video source frame 210 and theblocks (changed blocks 222) that have changed more than a minimum amountin relation to the previously encoded frame are identified. The blocksthat have not changed more than a minimum amount (unchanged blocks 224)are not identified and may be discarded. At a crunching step 230, theidentified blocks 222 are copied or moved Into a contiguous block ofmemory 232 and a preamble block 234 is prepended to the set of blocks toidentify the locations of the identified blocks 222 within the frame210. At a crunching step 240, the contiguous block of memory containingthe identified blocks 222 and the preamble 234 is compressed using acompression algorithm to create a compressed frame 242. The compressedframe 242 can then be transmitted to the client device 140 anddecompressed by generally reversing the compression steps.

FIG. 3 illustrates, in additional detail, a method 300 for encodingvideo in accordance with one embodiment of the invention. The method 300can be performed by the video encoder 120 in accordance with the system100, but the method 300 may be performed by other devices in othercontexts as well.

At a step 310, a video frame is input and can be converted ortransformed to a desired display resolution, size, and format. For aPalmOS device, for example, the frame m y be converted to a160.times.160 pixel or smaller color or greyscale image. Color imagescan be transformed into YUV format, which is more effectively compressedthan RGB.

At steps 320 and 330, a block size is identified and the frame isdivided into a number of uniform pixel blocks 214. The size of eachblock may range from 1.times.1 (a single pixel) to the entire size ofthe image (e.g. 16.0.times.160). Although all of the blocks 214 for aparticular frame should be the same size, different block sizes may beused in different frames. In one embodiment, the block size isidentified by an encoding parameter. The block size may alternatively beidentified by performing an analysis of the present frame and previouslyencoded frames. The determination of the block size will be discussed inadditional detail below.

At a step 340, changed pixel blocks 222 are identified. Each pixel block214 is compared to the corresponding pixel block in the decoded versionof the previous encoded frame. If the pixel blocks differ by at least aminimum amount, the block is identified. In one embodiment,sadifference, T, is calculated for each frame, n in relation to a previousframe n-1, based upon the value F(x,y) for a pixel located at (x,y):$T = {\sum\limits_{x,{y < {blocksize}}}{{{F_{n}\left( {x,y} \right)} - {F_{n - 1}\left( {x,y} \right)}}}}$

The value F(x,y) for a can be the luminance component of the pixel. WhenT exceeds a certain threshold value, the block is identified as havingchanged. The selection of this threshold value may depend upon the blocksize, the desired image quality, and the image formats, among otherthings. Accordingly, a block is identified as having changed when theluminance difference is too high. The chrominance values generally maybe ignored for the purpose of determining whether a pixel or block haschanged. This is due to the human eye's higher sensitivity to luminancethan to chrominance.

As will be understood by one skilled in the art, the step 340 must takeinto account the case where there is no previous decoded video frame,such as when the first frame of a sequence is encoded. In this case, allof the blocks of the frame are identified as changed.

At a step 350, the identified pixel blocks are copied or moved into acontiguous block of memory. The pixel bocks that do not have at least aminimum difference are therefore discarded. In one embodiment, the pixelblocks that are not identified are deleted from the frame and theremaining blocks moved into a contiguous memory space.

At a step 360, the video encoder 120 adds a preamble block to thecontiguous block of memory to provide an identification, within theencoded frame, of the pixel blocks that have been identified. Thepreamble block indicates whether a particular pixel block is included inthe compressed representation of the video frame. The preamble blockincludes a layout of the memory block to enable the decoding of thevideo frame by the decoder 150. The preamble block also indicates theblock size that was used to encode a particular video frame. There canbe one preamble block for each frame.

In one embodiment, the preamble block contains one “present” bit foreach pixel block in the frame. The “present” bit specifies whether thecorresponding pixel block is present or included in the encoded frame.In the case a 160.times.160 frame is represented using one hundred16.times.16 pixel blocks, the “present” bits can be arranged, forexample, in a memory block of 10 words of 16 bits each, where the last 6bits of each word are not used. In this case, when the 5.sup.th bit ofthe 3.sup.rd word is set to 1, the 5.sup.th block in the 3.sup.rd rowhas been identified and included, meaning that the block is present inthe encoded representation of the video frame. Other configurations,which may utilize some or all of the bits in a memory block, mayalternatively be used.

At a step 370, the video encoder 120 compresses the contiguous block ofmemory to form a compressed frame 242. This compression step results incompressing both the preamble block 234 and the pixel blocks 222. Thememory block can be compressed by any of a variety of compressionalgorithms. In one embodiment, the block is compressed by an LZW-likecompression algorithm. In another embodiment, zLib compression algorithmis used. In another embodiment, LZO compression algorithm is used.Different compression algorithms can be used depending on the targetclient device. Certain decompression algorithms can be more effectivelyrun on certain client devices.

The compressed video frame 242 can then be streamed or transmitted tothe client device for decoding and display. In one embodiment, encodedframes are partitioned into packets that are transmitted to the decodingdevice in accordance with known techniques.

III. Determination of Block Size to Use in Encoding a Frame

In one embodiment, the selection of block size to encode a particularvideo frame is based on which block size produces the best result. Thebest result may be produced when the size of the encoded video frame isthe smallest thereby minimizing the amount of data that need to betransferred to and decoded by the client device 140.

FIG. 4 Illustrates a method 400 of selecting a block size to produce thebest result. This method can be used in conjunction with any block-basedvideo encoding method. The size of the block used to encode a frame cansubstantially affect the resulting size of the encoded frame. Forexample, in a video sequence with a significant amount of motion, it maybe advantageous to use a smaller block size because fewer changed pixelsmay need to be Included in the encoded video frame. Therefore, thenumber of changed pixels that need to be included in the contiguousmemory block 232 can be reduced. A larger block size may unnecessarilyinclude additional pixels that may not have changed since the lastframe.

As the block size decreases, however, the number of blocks required torepresent the frame increases. Therefore, the size of the preamble blockincreases as the block size decreases since more bits are required toindicate whether a particular pixel block is included in the compressedrepresentation of the video. As a result, the advantages of using asmaller block size must be weighed against the increased overhead indetermining which block size produces the best result.

In one embodiment, at a step 420, a video frame is encoded in accordancewith method 300 using the 16.times.16 block size. At a step 430, thesame frame is encoded again using the next smaller block size of8.times.8.

At a decision step 440, a determination as to which size produces betterresult is made. In one embodiment, a determination as to which blocksize produces the best result is made by comparing the final compressedvideo frame. In this embodiment, at the decision step 440, a comparisonis made of the final sizes of the encoded representations of the videoframe. For example, the final size of the encoded video frame using a16.times.16 block size is compared with the final size of the encodedvideo frame using a 8.times.8 block size. If the encoded video frameusing the 8.times.8 block size is smaller than the encoded video frameusing the 16.times.16 block size, control returns to step 430 to encodethe same frame again using even a smaller block size of 4.times.4. Thisprocess of encoding the video frame using the next smaller size blocksis continued until using the smaller size block no longer produces asmaller encoded video frame. When this occurs, the control flows to step460. At a step 460, the smallest block size that results in improvementis used to encode the video frame.

In additional embodiments, a block size in the middle of the range ofpossible block sizes may be compared to the next larger and the nextsmaller block sizes. If the best result is produced by the middle blocksize then the process ends and the middle block size is used. If thebest result is produced by the next larger block size, the second nextlarger block size is then considered and so on. If the best result isproduced by the next small block size, the second next smaller blocksize is then considered and so on.

In accordance with one embodiment, a data table can be calculated inadvance that allows the identification of the block size that results inthe smallest contiguous block of memory after the preamble block isprepended to the changed blocks. The data table lists the requiredreduction in the number of identified blocks for each transition from ablock size to a next smaller block size. One method starts with thelargest block size. The method iteratively examines each smaller blocksize to determine if the requisite reduction in the number of identifiedblocks is provided. If the requisite reduction is not provided by thenext smaller block size, then the larger block size will produce asmaller contiguous block of memory. Generally, a smaller contiguousblock of memory will result in a smaller compressed block of memory(compressed frame 242).

IV. Decoding Method

FIG. 5 illustrates a method 500 performed by the decoder 150 included inthe client device 140. The decoder 150 maintains a working video framethat maintains the image that is displayed. The decoder 150 iteratesthrough the method 500 to decode each encoded frame.

At a step 510, the decoder receives the compressed frame 242 containingthe compressed preamble block and the memory block. At a step 520, thedecoder decompresses the compressed frame 242. The step 520 reproducesthe uncompressed version of the contiguous memory block containing thepreamble block and the pixel blocks. The uncompressed version of thecontiguous memory block can be identical to the memory block produced inthe step 360 of the method 300.

At a step 530, the decoder reads the preamble block to determine whatblock size was used to encode the frame and to determine which pixelblocks are present in the contiguous memory block. At a step 540, thedecoder reads the bit sequences in the preamble block and copies theidentified pixel blocks into the corresponding video frame to bedisplayed. At a step 550, the decoder displays the working video frame,which is displayed by the client device 140.

In decoding a first frame in a sequence, the decoder 150 may start withan empty working frame or a working frame with old/stale data.Nevertheless, since the first frame in a sequence will contain all ofthe pixels in the frame, all of the pixels in the working frame will beupdated.

V. Implementing Key Frames

Key frames are encoded frames about which the decoding of a sequence offrames can begin. Accordingly, a sequence can be decoded starting at alocation other than its beginning. Key frames also provide the abilityto seek forward and backward within a video sequence. A key frame isgenerally inserted at fixed time intervals in a video sequence, such asevery second. Without key frames, decoding generally cannot be initiatedin the middle of a sequence of encoded frames since each encoded framemay rely upon data in any number of preceding decoded frames. Ifdecoding is initiated at a point other than the beginning of a sequence,the preceding decoded frames may not be available.

In accordance with one embodiment, a key frame contains sufficientinformation to allow a full frame to be produced using only the encodedkey frame and a limited number of preceding encoded frames. A key framemay be configured to rely upon zero preceding frames in which case thekey frame is encoded in the same way as the initial frame in a sequenceby assuming all pixels have changed. A key frame may alternatively beconfigured to rely upon one or more preceding frames (hereinafter“associated frames”). In this case, the encoding of a key frame can beperformed using the method 300, but with a modified step 340 in whichthe changed pixel blocks are identified. Each pixel block that is notidentified as changed In at least one of the associated frames isidentified as changed during the encoding of the key frame. Accordingly,each pixel block in the working frame is provided by at least one of thekey frame and the associated frames. Each key frame can be identified asa key frame and the associated frames upon which the key frame dependsare can also identified. This identification information can also beincorporated into the preamble block.

A key frame that does not have associated frames (contains all of thepixel blocks in a video frame) can be decoded using the method 500. Inorder to decode a key frame that has associated frames, the associatedframes are first decoded and their pixel data inserted into the workingframe. The key frame is then decoded and its pixel data inserted intothe working frame. Since the key frame provides all the pixels that arenot provided by the associated frames, each of the pixels in the workingframe is supplied with data by either the key frame or the associatedframes. In an alternative embodiment, the key frame can be configured toprecede rather than follow the associated frames.

VI. CONCLUSION

Although the invention has been described in terms of certainembodiments, other embodiments that will be apparent to those ofordinary skill in the art, including embodiments which do not provideall of the features and advantages set forth herein, are also within thescope of this invention. Accordingly, the scope of the Invention isdefined by the claims that follow. In the claims, a portion shallinclude greater than none and up to the whole of a thing. In methodclaims, reference characters are used for convenience of descriptiononly, and do not indicate a particular order for performing a method.

1-24. (canceled)
 25. An article of manufacture comprising a storagemedium having instructions stored thereon that, if executed, result inencoding a video stream by: receiving a current video frame of the videostream; subdividing the current video frame into uniform blocks of aselected block size, and comparing the blocks to corresponding blocks ofa decoded version of a preceding video frame to determine whether any ofthe blocks of the current video frame are sufficiently unchanged fromthe preceding frame to be discarded; optionally repeating saidsubdividing or said comparing, or combinations thereof, using at leastone additional block size, wherein the current video frame is capable ofbeing separately subdivided or compared, or combinations thereof, to thepreceding video frame using multiple block sizes; selecting from themultiple block sizes a uniform block size that is capable of producing arelatively better video frame compression result; and encoding the videoframe in the video stream with the block size selected by saidselecting.
 26. An article of manufacture as claimed in claim 25, whereinthe instructions, if executed, further result in encoding differentframes using different block sizes for multiple frames of the videostream.
 27. An article of manufacture comprising a storage medium havinginstructions stored thereon that, if executed, result in encoding avideo stream by: receiving a current video frame of the video stream;determining which of multiple possible uniform block sizes produces arelatively better result for encoding the current video frame, whereinthe uniform block sizes are used to subdivide or compare, orcombinations thereof, the current video frame or a preceding videoframe, or combinations thereof, to determine whether any blocks of thecurrent video frame are sufficiently unchanged to be discarded;compressing the current video frame using at least in part the blocksize determined to produce the relatively better result; and storing thecompressed video frame in conjunction with an indication of the blocksize.
 28. An article of manufacture comprising a storage medium havinginstructions stored thereon that, if executed, result in encoding videoby: dividing a video frame into blocks according to a uniform or nearlyuniform block size; identifying changed blocks by comparing one or moreblocks to a corresponding block in a decoded version of a previousframe; copying changed blocks into a contiguous or nearly contiguousblock of memory; and adding a preamble block.
 29. Article of manufactureas claimed in claim 28, the preamble block being capable of indicatingone or more blocks that are included in the contiguous or nearlycontiguous block of memory.
 30. Article of manufacture as claimed inclaim 28, the preamble block being capable of indicating a block sizeused to encode the video frame.
 31. Article of manufacture as claimed inclaim 28, the preamble block being capable of varying in size from frameto frame.
 32. Article of manufacture as claimed in claim 28, saididentifying comprises determining a luminance difference from acorresponding block in an encoded version of the previous frame. 33.Article of manufacture as claimed in claim 28, the luminance differencecomprising a predefined threshold value.
 34. Article of manufacture asclaimed in claim 28, wherein the instructions, if executed, furtherresult in encoding video by compressing at least in part the contiguousor nearly contiguous memory block using an LZW type compressionalgorithm.
 35. Article of manufacture as claimed in claim 28, whereinthe instructions, if executed, further result in encoding video bycompressing at least in part the contiguous or nearly contiguous memoryblock using an LZW type compression process, the compression processcomprising a zLIB type process.
 36. Article of manufacture as claimed inclaim 28, wherein the instructions, if executed, further result inencoding video by compressing at least in part the contiguous or nearlycontiguous memory block using an LZW type compression process, thecompression process comprising an LZO type process.
 37. An article ofmanufacture comprising a storage medium having instructions storedthereon that, if executed, result in encoding video by: encoding a videoframe using a first uniform or nearly uniform block size to create afirst encoded frame; encoding the same or nearly the same video frameusing a second uniform or nearly uniform block size to create a secondencoded frame; comparing a size of the first encoded frame to a size ofthe second encoded frame; and selecting the uniform or nearly uniformblock size that results in a smaller encoded frame.
 38. An article ofmanufacture comprising a storage medium having instructions storedthereon that, if executed, result in encoding a video stream by:representing video frames wherein the video frames are encoded usingmultiple block sizes; and representing preamble blocks including bitmapsof the encoded video frames or indicators indicating the block size usedto encode the video frames in the video stream, or combinations thereof.39. An article of manufacture comprising a storage medium havinginstructions stored thereon that, if executed, result in decoding avideo stream by: receiving a video frame encoded using multiple blocksize detection; decompressing the received video frame; determining ablock size used to encode the video frame; determining which blocks arepresent in the encoded video frame; copying one or more blocks presentin the encoded video frame into a display area; and displaying the videoframe.
 40. An article of manufacture as claimed in claim 39, wherein oneor more key frames are utilized to decode a sequence of frames startingat a location other than a beginning of the sequence.
 41. An article ofmanufacture as claimed in claim 39, wherein one or more key frames areutilized to decode a sequence of frames starting at a location otherthan a beginning of the sequence, one or more of the key frames beingutilized to seek forward or backward, or combinations thereof, withinthe sequence of frames.
 42. An article of manufacture comprising astorage medium having instructions stored thereon that, if executed,result in encoding a video stream by: subdividing a current video frameinto uniform or nearly uniform blocks of a selected size; identifyingone or more blocks of the current video frame that differ by at least aminimum extent from one or more corresponding blocks in a decodedversion of a preceding video frame; subdividing or comparing, orcombinations thereof, wherein the current video frame is subdivided orcompared, or combinations thereof, to the preceding video frame using aone or more block sizes; and selecting from the multiple block sizes ablock size that produces a relatively better video compression result.43. An article of manufacture as claimed in claim 42, wherein theinstructions, if executed further result in encoding a video stream byencoding the video frame using one or more of the block sizes.
 44. Anarticle of manufacture as claimed in claim 43, said selecting utilizingan output of said encoding.
 45. An article of manufacture as claimed inclaim 43, wherein one or more of multiple frames of the video stream areutilized to generate an encoded video stream in which different framesare encoded using different block sizes.
 46. An article of manufacturecomprising a storage medium having instructions stored thereon that, ifexecuted, result in encoding a video frame by: providing a decodedpreceding video frame; subdividing the video frame into one or moreblocks, wherein at least one or more of the blocks comprises at leastone pixel; identifying the blocks of a current video frame that differby at least a minimum extent from one or more corresponding blocks in adecoded preceding video frame; creating a map of locations of theidentified blocks identified by said identifying in the video frame;arranging the map or the identified blocks, or combinations thereof, ina contiguous or nearly contiguous block of memory; and compressing thedata in the contiguous or nearly contiguous block of memory.
 47. Amethod for encoding video, comprising: dividing one or more frames ofvideo into one or more blocks according to a predetermined block size;identifying changed blocks by comparing a block in a present frame to acorresponding block in an encoded version of a previous frame; if thepresent frame is a key frame, identifying one or more blocks that werenot identified by said identifying changed blocks as being changedblocks in the key frame; copying one or more of the blocks identified aschanged to a contiguous or nearly contiguous memory; and compressing thecontiguous or nearly contiguous memory.
 48. A method as claimed in claim47, further comprising adding one or more preamble blocks to thecontiguous or nearly contiguous memory, the preamble blocks beingcapable of identifying the blocks that are included in the contiguous ornearly contiguous memory.
 49. A method as claimed in claim 47, whereinan encoded key frame contains sufficient information to allow a fullframe, or nearly a full frame, to be decoded by using the key frame andone or more preceding encoded frames.
 50. A method as claimed in claim47, wherein an encoded key frame contains all, or nearly all, the pixelsnot encoded in one or more preceding frames.
 51. A method as claimed inclaim 47, wherein a key frame is associated with one or more precedingframes.
 52. A method as claimed in claim 47, wherein a key frame isassociated with one or more succeeding frames.
 53. An apparatus forencoding video, comprising: means for dividing one or more frames ofvideo into one or more blocks according to a predetermined block size;means for identifying changed blocks by comparing a block in a presentframe to a corresponding block in an encoded version of a previousframe; means for identifying one or more blocks that were not identifiedby said means for identifying changed blocks as being changed blocks inthe key frame if the present frame is a key frame; means for copying oneor more of the blocks identified as changed to a contiguous or nearlycontiguous memory; and means for compressing the contiguous or nearlycontiguous memory.
 54. An apparatus as claimed in claim 53, furthercomprising means for adding one or more preamble blocks to thecontiguous or nearly contiguous memory, the preamble blocks beingcapable of identifying the blocks that are included in the contiguous ornearly contiguous memory.
 55. An apparatus as claimed in claim 53,wherein an encoded key frame contains sufficient information to allow afull frame, or nearly a full frame, to be decoded by using the key frameand one or more preceding encoded frames.
 56. An apparatus as claimed inclaim 53, wherein an encoded key frame contains all, or nearly all, thepixels not encoded in one or more preceding frames.
 57. An apparatus asclaimed in claim 53, wherein a key frame is associated with one or morepreceding frames.
 58. An apparatus as claimed in claim 53, wherein a keyframe is associated with one or more succeeding frames.
 59. An articleof manufacture comprising a storage medium having instructions storedthereon that, if executed, result in encoding video by: dividing one ormore frames of video into one or more blocks according to apredetermined block size; identifying changed blocks by comparing ablock in a present frame to a corresponding block in an encoded versionof a previous frame; if the present frame is a key frame, identifyingone or more blocks that were not identified by said identifying changedblocks as being changed blocks in the key frame; copying one or more ofthe blocks identified as changed to a contiguous or nearly contiguousmemory; and compressing the contiguous or nearly contiguous memory. 60.An article of manufacture as claimed in claim 59, wherein theinstructions, if executer, further result in encoding video by addingone or more preamble blocks to the contiguous or nearly contiguousmemory, the preamble blocks being capable of identifying the blocks thatare included in the contiguous or nearly contiguous memory.
 61. Anarticle of manufacture as claimed in claim 59, wherein an encoded keyframe contains sufficient information to allow a full frame, or nearly afull frame, to be decoded by using the key frame and one or morepreceding encoded frames.
 62. An article of manufacture as claimed inclaim 59, wherein an encoded key frame contains all, or nearly all, thepixels not encoded in one or more preceding frames.
 63. An article ofmanufacture as claimed in claim 59, wherein a key frame is associatedwith one or more preceding frames.
 64. An article of manufacture asclaimed in claim 59, wherein a key frame is associated with one or moresucceeding frames.
 65. A method for decoding video, comprising: decodingone or more frames associated with a key frame and inserting the data ofthe one or more decoded frames into a working frame; and decoding thekey frame and inserting the data of the decoded key frame into theworking frame.
 66. A method as claimed in claim 65, wherein saiddecoding one or more frames associated with the key frame occurs priorto said decoding of the key frame.
 67. A method as claimed in claim 65,wherein said decoding one or more frames associated with the key frameoccurs after said decoding of the key frame.
 68. An apparatus fordecoding video, comprising: means for decoding one or more framesassociated with a key frame and inserting the data of the one or moredecoded frames into a working frame; means for decoding the key frameand inserting the data of the decoded key frame into the working frame.69. A method as claimed in claim 68, wherein said means for decoding oneor more frames associated with the key frame decodes the one or moreframes prior to said means for decoding the key frame decodes the keyframe.
 70. A method as claimed in claim 68, wherein said means fordecoding one or more frames associated with the key frame decodes theone or more frames after said means for decoding the key frame decodesthe key frame.
 71. An article of manufacture comprising a storage mediumhaving instructions stored thereon that, if executed, result in decodingvideo by: decoding one or more frames associated with a key frame andinserting the data of the one or more decoded frames into a workingframe; and decoding the key frame and inserting the data of the decodedkey frame into the working frame.
 72. An article of manufacture asclaimed in claim 71, wherein said decoding one or more frames associatedwith the key frame occurs prior to said decoding of the key frame. 73.An article of manufacture as claimed in claim 71, wherein said decodingone or more frames associated with the key frame occurs after saiddecoding of the key frame.